package leetcode.interviewClassics;

import java.util.*;

/**
 * @author Cheng Jun
 * Description: 给定两个字符串 s1 和 s2，请编写一个程序，确定其中一个字符串的字符重新排列后，能否变成另一个字符串。
 * https://leetcode-cn.com/problems/check-permutation-lcci/
 * @version 1.0
 * @date 2021/10/29 20:52
 */
public class checkPermutation {

    public static void main(String[] args) {
        System.out.println(checkPermutation("abc", "cbad"));
    }

    // 1.两个字符串拥有的字符相同。
    // 2.两个字符串相同字符出现的个数也一样。
    static boolean checkPermutation(String s1, String s2) {
        if (s1.length() != s2.length()) {
            return false;
        } else {
            Map<String, Integer> map1 = new HashMap<>(128);
            Map<String, Integer> map2 = new HashMap<>(128);
            String[] split1 = s1.split("");
            String[] split2 = s2.split("");
            for (String s : split1) {
                if (map1.containsKey(s)) {
                    map1.put(s, map1.get(s) + 1);
                } else {
                    map1.put(s, 1);
                }
            }
            for (String s : split2) {
                if (map2.containsKey(s)) {
                    map2.put(s, map2.get(s) + 1);
                } else {
                    map2.put(s, 1);
                }
            }

            if (map1.size() != map2.size()) {
                return false;
            } else {
                for (String s : map1.keySet()) {
                    if (map1.get(s) != map2.get(s)) {
                        return false;
                    }
                }
            }
        }
        return true;
    }
}
